"""
    os 操作
    sys 操作
    time 模块
    datetime
    logging 模块
"""
import os
import sys
import time
import datetime
from datetime import datetime
import logging

print(os.name)

print(sys.getdefaultencoding())  # >>> utf-8
print(sys.path)
print(sys.modules)
print(sys.platform) # >>> win32
print(sys.version) # >>> 3.13.0

# 获取当前时间戳
timestamp = time.time()
print(f"当前时间戳: {timestamp}")

# 将时间戳转换为本地时间结构体
local_time_struct = time.localtime(timestamp)
print(f"本地时间结构体: {local_time_struct}")

# 通过索引分解年、月、日
year = local_time_struct[0]
month = local_time_struct[1]
day = local_time_struct[2]

# 也可以通过属性名分解年、月、日
year_by_attribute = local_time_struct.tm_year
month_by_attribute = local_time_struct.tm_mon
day_by_attribute = local_time_struct.tm_mday

print(f"通过索引分解 - 年: {year}, 月: {month}, 日: {day}")
print(f"通过属性名分解 - 年: {year_by_attribute}, 月: {month_by_attribute}, 日: {day_by_attribute}")


# 将时间戳转换为 UTC 时间结构体
utc_time_struct = time.gmtime(timestamp)
print(f"UTC 时间结构体: {utc_time_struct}")

# 将时间结构体转换为时间戳
new_timestamp = time.mktime(local_time_struct)
print(f"转换后的时间戳: {new_timestamp}")

# 格式化时间结构体为字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time_struct)
print(f"格式化后的时间字符串: {formatted_time}")

# 将字符串解析为时间结构体
time_string = "2024-10-01 12:30:00"
parsed_time_struct = time.strptime(time_string, "%Y-%m-%d %H:%M:%S")
print(f"解析后的时间结构体: {parsed_time_struct}")

# 暂停程序执行
print("程序开始暂停")
time.sleep(2)  # 暂停 2 秒
print("程序暂停结束")

# 获取 CPU 时间
start_time = time.process_time()
# 模拟一些计算
for i in range(50000000):
    pass
end_time = time.process_time()
print(f"CPU 执行时间: {end_time - start_time} 秒")


# 将时间戳转换为本地时间结构体
local_time_struct = time.localtime(timestamp)
# 格式化时间结构体为字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time_struct)
print(f"时间戳 {timestamp} 对应的本地时间是: {formatted_time}")
# 将时间戳转换为本地时间结构体
local_time_struct = time.localtime(1740235491)
# 格式化时间结构体为字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time_struct)
print(f"时间戳 {1740235491} 对应的本地时间是: {formatted_time}")


# 定义两个时间字符串
time_str1 = "2021-09-29 12:00:00"
time_str2 = "2021-09-29 15:00:00"

# 将字符串转换为 datetime 对象
dt1 = datetime.strptime(time_str1, "%Y-%m-%d %H:%M:%S")
dt2 = datetime.strptime(time_str2, "%Y-%m-%d %H:%M:%S")

# 计算差值，得到 timedelta 对象
diff = dt2 - dt1
print(f"两个时间相差 {diff}")

if not os.path.isdir("../logs"):
    os.makedirs("../logs")
logging.basicConfig(
    filename='../logs/log01.log',
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)-8s - %(name)-10s - %(module)-10s - %(funcName)-10s - %(lineno)-5d - %(message)s',
    filemode='a')
logging.debug("this logging.debug")
logging.info("this logging.info")
logging.warning("this logging.warn")
logging.error("this logging.error")

'''
1. 时间相关
    %(asctime)s：日志记录的时间，默认格式为 YYYY - MM - DD HH:MM:SS,sss，你可以通过 datefmt 参数自定义日期格式。
    %(created)f：日志记录创建的时间戳。
2. 日志级别相关
    %(levelname)s：日志的级别名称，如 DEBUG、INFO、WARNING、ERROR、CRITICAL。
    %(levelno)s：日志级别的数值表示。
3. 日志来源相关
    %(name)s：日志记录器的名称。
    %(module)s：调用日志记录函数的模块名称。
    %(filename)s：调用日志记录函数的文件名。
    %(funcName)s：调用日志记录函数的函数名。
    %(lineno)d：调用日志记录函数的代码行号。
4. 日志消息相关
    %(message)s：实际的日志消息内容。
5. 进程和线程相关
    %(process)d：记录日志的进程 ID。
    %(processName)s：记录日志的进程名称。
    %(thread)d：记录日志的线程 ID。
    %(threadName)s：记录日志的线程名称。
'''
